#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H

#include <QWidget>
#include <QScrollArea>
#include <QLabel>

//////////////////////////////////////////////
//Item的类型
////////////////////////////////////////////
enum ItemType{
    SessionItemType,
    FriendItemType,
    ApplyItemType
};


//////////////////////////////////////////////
//滚动区域
////////////////////////////////////////////
class SessionFriendArea : public QScrollArea   //滚动区域
{
    Q_OBJECT
public:
    explicit SessionFriendArea(QWidget *parent = nullptr);

    //清空该区域所有的item
    void clear();

    //添加一个item， 表示添加哪种item，id跟着不同的itemType有不同的含义
    //SessionItem， id是chatSesionId
    //FriendItem/ApplyItem， id是userId
    void addItem(ItemType itemType, const QString& id, const QIcon& avatar, const QString& name, const QString& text);

    //选中某个指定的item，通过index下标来进行下选择
    void clickItem(int index);

private:
    //后续往container内部的layout中添加元素，就能够触发QScrollArea的滚动效果
    QWidget* container;  //的高度随着里面添加的元素数目增多，而动态变更

signals:
};



//////////////////////////////////////////////
//滚动区域中Item的实现
////////////////////////////////////////////
class SessionFriendItem:public QWidget{
    Q_OBJECT    //想让这个类支持信号槽机制，就加入这个宏

public:
    //此处owner对应着SessionFriendArea对象的指针
    SessionFriendItem(QWidget* owner, const QIcon& avatar, const QString& name, const QString& text);

    void paintEvent(QPaintEvent* event) override;

    void mousePressEvent(QMouseEvent* event) override;
    void enterEvent(QEnterEvent* event)override;
    void leaveEvent(QEvent* envent)override;

    void select();

    //item被点击之后的业务逻辑
    virtual void active();

private:
    //owner指向SessionFriendArea
    QWidget* owner;

    //用来表示当前Item是否是选中状态
    bool selected = false;
protected:
    QLabel* messageLabel;  //需要让这个成员被子类访问
};



//////////////////////////////////////////////
//会话Item的实现
////////////////////////////////////////////

class SessionItem:public SessionFriendItem{
    Q_OBJECT    //想让这个类支持信号槽机制，就加入这个宏

public:
    SessionItem(QWidget* owner, const QString& chatSessionId, const QIcon& avatar,
                const QString& name, const QString& lastMessage);

    void active() override;

private:
    //当前会话ID
    QString chatSessionId;

};


//////////////////////////////////////////////
//好友Item的实现
////////////////////////////////////////////

class FriendItem:public SessionFriendItem{
    Q_OBJECT    //想让这个类支持信号槽机制，就加入这个宏

public:
    FriendItem(QWidget* owner, const QString& userId, const QIcon& avatar,
                const QString& name, const QString& description);
    void active() override;
private:
    //好友的用户ID
    QString userId;

};




//////////////////////////////////////////////
//好友申请Item的实现
////////////////////////////////////////////

class ApplyItem:public SessionFriendItem{
    Q_OBJECT    //想让这个类支持信号槽机制，就加入这个宏

public:
    ApplyItem(QWidget* owner, const QString& userId, const QIcon& avatar,
               const QString& name);
    void active() override;
private:
    //申请人的用户ID
    QString userId;

};
#endif // SESSIONFRIENDAREA_H
